<dhpInclude input="../../../html/webpage.html">

<dhpClass name="ofc" extends="base">
  <dhpValue reference="docs/index.html">
  <dhpValue home="index.html">
  <dhpValue news="news.html">
  <dhpValue roadmap="roadmap.html">
  <dhpValue changelog="changelog.html">
  <dhpValue faq="faq.html">
  <dhpValue doc="doc.html">
  <dhpValue download="download.html">
  
  <dhpCode name="title" action="replace">
  Objective-c Foundation Classes - $(title)
  </dhpCode>

  <dhpCode name="menu" action="replace">
  <a href="$(home)">Home</a>
  <a href="$(news)">News</a>
  <a href="$(roadmap)">Roadmap</a>
  <a href="$(changelog)">ChangeLog</a>
  <a href="$(faq)">Faq</a>
  <a href="$(doc)">Documentation</a>
  <a href="$(download)">Download</a>
  <a href="$(ffl)">FFL</a>
  </dhpCode>
</dhpClass>


<dhpPage class="home" output="index.html">

<dhpClass name="home" extends="ofc" title="Welcome">
  <dhpCode name="keywords" action="append">
    <meta name="Keywords"    content="Objective-C,Software,Library,Foundation,Classes,Complex">
  </dhpCode>
  <dhpCode name="logo-def" pack="no">
    <script type="text/javascript">
    <dhpInclude input="logo.js">
    </script>
  </dhpCode>
  <dhpCode name="logo-id">
    <div id=logo></div>
  </dhpCode>
  <dhpCode name="contents" action="replace">
    <p>The Objective-c Foundation Classes (OFC) is a general library 
    written in the objective-c language. Its main purpose is to make it easier
    to develop applications.</p>
    <p>Refer to the objective-c <a href="$(ObjcWiki)">wiki</a> or 
    <a href="$(ObjcFaq)">faq</a> for more information about the
    objective-c language.</p>
    <p>The classes in the library are grouped in five clusters:</p>
    <ul>
      <li>DataTypes - integer, text string, fraction, bitarray, date/time,
             random generators, big integer, big double ...</li>
      <li>Collections - array, list, hash table, AVL and n-tree, circular
             array, graph ...</li>
      <li>Network - TCP/UDP server and client, HTTP client, Telnet client ...</li>
      <li>C-library wrappers - DBM, socket, MD5, regular expression, timer,
           file, directory, gzip and bzip2 file, text screen ...</li>
      <li>Compound - Argument parser, calendar, finite state machine,
           tokenizer, XML tree, discrete distribution, objective-c source
           tokenizer ...</li>
    </ul>
    <p>See <a href="$(doc)">Documentation</a> for an overview of all the classes 
    and protocols in the library.</p>
    <p>The documentation of the library can be browsed in 
    <a href="$(reference)">HTML</a> and is also distributed in the download 
    package. In the package there are also quick reference cards in tex format 
    for every cluster. Some more general information can be found in the 
    <a href="$(Faq)">FAQ</a>.</p>
    <p>The <a href="$(download)">download</a> package includes the library and 
    test programs. At the moment there are no example programs. The test 
    programs give a good introduction in how to use the different classes. 
    It is the intention to add example tools and applications on a later moment.</p>
    <p>The library, test programs and the quick reference cards may be 
    freely distributed under the terms of the <a href="$(License)">GNU General 
    Public License</a>.</p>
    <p>About twice a year a new version will be published on this site, as 
    stated in the <a href="$(Roadmap)">roadmap</a>. This will be announced on
    <a href="$(Freshmeat)">Freshmeat</a>.</p>
  </dhpCode>
  <dhpCode name="info" action="replace"> 
  --  Generated by ofcdhp</a>
  </dhpCode>
</dhpClass>



<dhpPage class="news" output="news.html">

<dhpClass name="news" extends="ofc" title="News">
  <dhpCode name="contents" action="replace">
  <h2>$(date format="%A %d %B %Y" value="20060725")</h2>
  <p>Version 0.7.1 is made public. In this release there is a new class 
  (DBigFraction) and a new protocol (DBitArithmetic). There are also a number 
  of bug fixes related to 64-bit platforms. The copy-constructor support 
  is improved and as a result all collections can now be (deep) copied.
  There are also some small bug fixes and a number of classes are extended with
  new methods. For more details see the <a href="$(ChangeLog)">changelog</a>.</p>
  <h2>$(date format="%A %d %B %Y" value="20060114")</h2>
  <p>The seventh release of the package (version 0.7.0) is made public. 
  There are ten new classes in the library and two new protocols. Four
  bugs are fixed and one classes is extended with an extra method. The 
  library will now also compile on FreeBSD, but there are some limitations. 
  For more details see the <a href="$(ChangeLog)">changelog</a> and the README
  file in the download package.</p>
  <h2>$(date format="%A %d %B %Y" value="20051101")</h2>
  <p>The Objective-c foundation classes are moved to their own website 
  <a href="$(ofc)">ofc.dvoudheusden.net</a>. In a few months the hosting
  at sunsite.dk will be discontinued.</p>
  <h2>$(date format="%A %d %B %Y" value="20050620")</h2>
  <p>The sixth release of the package (version 0.6.0) is made public. 
  The library is extended with seven new classes and one new protocol.
  Two classes have extra methods and in one class a bug is fixed. For
  more details see the <a href="$(ChangeLog)">changelog</a>.</p>
  <h2>$(date format="%A %d %B %Y" value="20050213")</h2>
  <p>The fifth release of the package (version 0.5.0) is made public. 
  There are nine new classes and one new protocol. Four classes are 
  extended with new methods. The HTML Documentation is cleaned up. See the 
  <a href="$(ChangeLog)">changelog</a> for more details.</p>
  <h2>$(date format="%A %d %B %Y" value="20041117")</h2>
  <p>The fourth release of the package (version 0.4.0) is made public. 
  There are nine new classes and four new protocols. Five classes are 
  extended with new methods. And there are also a few bug fixes. See the 
  <a href="$(ChangeLog)">changelog</a> for the details.</p>
  <h2>$(date format="%A %d %B %Y" value="20040622")</h2>
  <p>The third release of the package (version 0.3.0) is made public. 
  There are ten new classes and a few bug fixes. See the 
  <a href="$(ChangeLog)">changelog</a> for the details.</p>
  <h2>$(date format="%A %d %B %Y" value="20040201")</h2>
  <p>The second alpha release of the package (version 0.2.0) is made public. 
  There are fourteen new classes and a few bug fixes. See the 
  <a href="$(ChangeLog)">changelog</a> for the details.</p>
  <h2>$(date format="%A %d %B %Y" value="20031015")</h2>
  <p>The first alpha release of the package (version 0.1.0) is made public.</p>
  <h2>$(date format="%A %d %B %Y" value="20030928")</h2>
  <p>Today the browsable documentation is placed on the site. It should be noted
  that the contents is preliminary.</p> 
  <h2>$(date format="%A %d %B %Y" value="20030701")</h2>
  <p>Last week SunSite have set up the website for OFC. Today the web pages
  for OFC went alive.</p> 
  </dhpCode>
</dhpClass>



<dhpPage class="documentation" output="doc.html">

<dhpClass name="documentation" extends="ofc" title="Documentation">
  <dhpMacro name="class_item" label="Name" cluster="DataType" since="0.1.0" last="0.1.0" req="-" note="-">
    <tr class="moditemtxt">
      <td><a class="moditemtxt" href="docs/$(label).html">$(label)</a></td>
      <td class="moditemtxt">$(cluster)</td>
      <td class="moditemtxt" align="center">$(since)</td>
      <td class="moditemtxt" align="center">$(last)</td>
      <td class="moditemtxt" align="center">$(req)</td>
      <td class="moditemtxt" align="center">$(note)</td>
    </tr>
  </dhpMacro>
  
  <dhpMacro name="prot_item" label="Name"  since="0.1.0" last="0.1.0" note="-">
    <tr class="moditemtxt">
      <td><a class="moditemtxt" href="docs/Protocol-$(label).html">$(label)</a></td>
      <td class="moditemtxt" align="center">$(since)</td>
      <td class="moditemtxt" align="center">$(last)</td>
      <td class="moditemtxt" align="center">$(note)</td>
    </tr>
  </dhpMacro>

  <dhpCode name="contents" action="replace">
  <p>This page gives an overview of all the classes and protocols present in
  the OFC library. For classes it lists the name of the class, the cluster
  of the class, the version in which the class was first present, the version
  in which the class was last changed, the external requirements for the 
  class and  some notes. For protocols only the name, the versions and the 
  notes are listed. External requirements are optional: if the 
  requirement is not met, the class will not be present in the library.</p>
  <p>Note: the documentation for the version 0.8.0 is still preliminary.</p>
  <table class="modbox" border="0" align="center" cellspacing="0" cellpadding="5">
    <tr><th class="modheadtxt" colspan="6">Classes</th></tr>
    <tr>
      <th class="modsubtxt">Name</th>
      <th class="modsubtxt">Cluster</th>
      <th class="modsubtxt">Since</th>
      <th class="modsubtxt">Last updated</th>
      <th class="modsubtxt">Requires</th>
      <th class="modsubtxt">Notes</th>
    </tr>
  $(class_item label="DBigDouble"   cluster="DataType" since="0.7.0" last="0.7.1" req="gmp")
  $(class_item label="DBigFraction" cluster="DataType" since="0.7.1" last="0.7.1" req="gmp")
  $(class_item label="DBigInt"      cluster="DataType" since="0.6.0" last="0.7.1" req="gmp")
  $(class_item label="DBitArray"    cluster="DataType" since="0.1.0" last="0.7.1")
  $(class_item label="DBool"        cluster="Datatype" since="0.1.0" last="0.1.0")
  $(class_item label="DColor"       cluster="Datatype" since="0.4.0" last="0.4.0")
  $(class_item label="DComplex"     cluster="Datatype" since="0.1.0" last="0.6.0")
  $(class_item label="DData"        cluster="DataType" since="0.1.0" last="0.7.1")
  $(class_item label="DDateTime"    cluster="DataType" since="0.5.0" last="0.5.0")
  $(class_item label="DDouble"      cluster="DataType" since="0.1.0" last="0.1.0")
  $(class_item label="DDoubleArray" cluster="DataType" since="0.7.0" last="0.7.1")
  $(class_item label="DFile"        cluster="DataType" since="0.1.0" last="0.5.0")
  $(class_item label="DFixedPoint"  cluster="DataType" since="0.6.0" last="0.6.0")
  $(class_item label="DFraction"    cluster="DataType" since="0.2.0" last="0.7.1")
  $(class_item label="DInt"         cluster="DataType" since="0.1.0" last="0.1.0")
  $(class_item label="DIntArray"    cluster="DataType" since="0.6.0" last="0.7.1")
  $(class_item label="DLong"        cluster="DataType" since="0.1.0" last="0.1.0")
  $(class_item label="DRnd"         cluster="DataType" since="0.2.0" last="0.2.0")
  $(class_item label="DLRnd"        cluster="DataType" since="0.2.0" last="0.2.0")
  $(class_item label="DScore"       cluster="DataType" since="0.6.0" last="0.6.0")
  $(class_item label="DShort"       cluster="DataType" since="0.1.0" last="0.1.0")
  $(class_item label="DText"        cluster="DataType" since="0.1.0" last="0.7.1")
  $(class_item label="DValue"       cluster="DataType" since="0.7.0" last="0.7.1")

  $(class_item label="DArray"        cluster="Collection" since="0.1.0" last="0.7.1")
  $(class_item label="DAvlTree"      cluster="Collection" since="0.1.0" last="0.7.1" note="non-recursive")
  $(class_item label="DAvlIterator"  cluster="Collection" since="0.1.0" last="0.1.0")
  $(class_item label="DCircle"       cluster="Collection" since="0.4.0" last="0.7.1")
  $(class_item label="DCube"         cluster="Collection" since="0.2.0" last="0.7.1")
  $(class_item label="DGraph"        cluster="Collection" since="0.7.0" last="0.7.1" note="dot export")
  $(class_item label="DGraphEdge"    cluster="Collection" since="0.7.0" last="0.7.1")
  $(class_item label="DGraphNode"    cluster="Collection" since="0.7.0" last="0.7.1")
  $(class_item label="DHashTable"    cluster="Collection" since="0.1.0" last="0.7.1")
  $(class_item label="DHashIterator" cluster="Collection" since="0.1.0" last="0.1.0")
  $(class_item label="DList"         cluster="Collection" since="0.1.0" last="0.7.1")
  $(class_item label="DListIterator" cluster="Collection" since="0.1.0" last="0.4.0")
  $(class_item label="DSortedList"   cluster="Collection" since="0.4.0" last="0.4.0")
  $(class_item label="DTable"        cluster="Collection" since="0.2.0" last="0.7.1")
  $(class_item label="DTree"         cluster="Collection" since="0.1.0" last="0.7.1")
  $(class_item label="DTreeIterator" cluster="Collection" since="0.1.0" last="0.5.0")

  $(class_item label="DAtExit"             cluster="Wrapper" since="0.2.0" last="0.2.0")
  $(class_item label="DBZipFile"           cluster="Wrapper" since="0.6.0" last="0.6.0" req="bz2lib")
  $(class_item label="DCRC32"              cluster="Wrapper" since="0.5.0" last="0.5.0")
  $(class_item label="DDbm"                cluster="Wrapper" since="0.2.0" last="0.2.1" req="gdbm")
  $(class_item label="DDirectory"          cluster="Wrapper" since="0.3.0" last="0.7.1")
  $(class_item label="DGZipFile"           cluster="Wrapper" since="0.5.0" last="0.5.0" req="zlib")
  $(class_item label="DInet6SocketAddress" cluster="Wrapper" since="0.5.0" last="0.7.1")
  $(class_item label="DInetSocketAddress"  cluster="Wrapper" since="0.3.0" last="0.7.1")
  $(class_item label="DKey"                cluster="Wrapper" since="0.5.0" last="0.5.0")
  $(class_item label="DMD5"                cluster="Wrapper" since="0.1.0" last="0.1.0")
  $(class_item label="DRegEx"              cluster="Wrapper" since="0.2.0" last="0.2.0" req="regex")
  $(class_item label="DSHA1"               cluster="Wrapper" since="0.2.0" last="0.2.0")
  $(class_item label="DSocket"             cluster="Wrapper" since="0.3.0" last="0.7.1")
  $(class_item label="DSystemLogger"       cluster="Wrapper" since="0.5.0" last="0.5.0" note="Unix")
  $(class_item label="DTextDrawable"       cluster="Wrapper" since="0.7.0" last="0.7.1" req="ncurses(Unix)")
  $(class_item label="DTextScreen"         cluster="Wrapper" since="0.7.0" last="0.7.0" req="ncurses(Unix)")
  $(class_item label="DTextSurface"        cluster="Wrapper" since="0.7.0" last="0.7.1" req="ncurses(Unix)")
  $(class_item label="DTimer"              cluster="Wrapper" since="0.1.0" last="0.1.0")
  $(class_item label="DUnixSocketAddress"  cluster="Wrapper" since="0.3.0" last="0.7.1" note="Unix")
  $(class_item label="DXMLReader"          cluster="Wrapper" since="0.4.0" last="0.5.0" req="expat")

  $(class_item label="DHTTPClient"         cluster="Network "since="0.4.0" last="0.4.0")
  $(class_item label="DTCPServer"          cluster="Network "since="0.3.0" last="0.3.0")
  $(class_item label="DTCPClient"          cluster="Network "since="0.3.0" last="0.3.0")
  $(class_item label="DTelNetClient"       cluster="Network "since="0.6.0" last="0.6.0")
  $(class_item label="DUDPServer"          cluster="Network "since="0.3.0" last="0.3.0")
  $(class_item label="DUDPClient"          cluster="Network "since="0.3.0" last="0.3.0")
  $(class_item label="DURL"                cluster="Network "since="0.4.0" last="0.7.1")
  
  $(class_item label="DArguments"            cluster="Compound" since="0.2.0" last="0.7.1")
  $(class_item label="DCalendar"             cluster="Compound" since="0.1.0" last="0.5.0")
  $(class_item label="DConfigReader"         cluster="Compound" since="0.2.0" last="0.2.0")
  $(class_item label="DConfigTree"           cluster="Compound" since="0.2.0" last="0.2.0")
  $(class_item label="DConfigWriter"         cluster="Compound" since="0.2.0" last="0.2.0")
  $(class_item label="DDiscreteDistribution" cluster="Compound" since="0.6.0" last="0.7.1")
  $(class_item label="DFSM"                  cluster="Compound" since="0.1.0" last="0.7.1")
  $(class_item label="DImageHeader"          cluster="Compound" since="0.1.0" last="0.1.0")
  $(class_item label="DLexer"                cluster="Compound" since="0.2.0" last="0.3.0" req="DRegex")
  $(class_item label="DObjcTokenizer"        cluster="Compound" since="0.7.0" last="0.7.0")
  $(class_item label="DProperty"             cluster="Compound" since="0.5.0" last="0.7.1")
  $(class_item label="DPropertyTree"         cluster="Compound" since="0.5.0" last="0.5.0" req="DXMLReader")
  $(class_item label="DSource"               cluster="Compound" since="0.3.0" last="0.7.0")
  $(class_item label="DTextWritableLogger"   cluster="Compound" since="0.5.0" last="0.7.1")
  $(class_item label="DTokenizer"            cluster="Compound" since="0.3.0" last="0.3.0")
  $(class_item label="DXMLNode"              cluster="Compound" since="0.4.0" last="0.7.1")
  $(class_item label="DXMLTree"              cluster="Compound" since="0.4.0" last="0.7.1" req="DXMLReader")
  $(class_item label="DXMLWriter"            cluster="Compound" since="0.4.0" last="0.4.0")
  </table>
  <br>
  <table class="modbox" border="0" align="center" cellspacing="0" cellpadding="5">
  <tr><th class="modheadtxt" colspan="4">Protocols</th></tr>
  <tr><th class="modheadtxt" colspan="6">Classes</th></tr>
  <tr>
    <th class="modsubtxt">Name</th>
    <th class="modsubtxt">Since</th>
    <th class="modsubtxt">Last updated</th>
    <th class="modsubtxt">Notes</th>
  </tr>
  $(prot_item label="DBitArithmetic"      since="0.7.1" last="0.7.1" note="-")
  $(prot_item label="DComparable"         since="0.1.0" last="0.1.0" note="-")
  $(prot_item label="DConfigHandler"      since="0.2.0" last="0.2.0" note="-")
  $(prot_item label="DDataReadable"       since="0.1.0" last="0.1.0" note="-")
  $(prot_item label="DDataWritable"       since="0.1.0" last="0.1.0" note="-")
  $(prot_item label="DDatable"            since="0.1.0" last="0.1.0" note="-")
  $(prot_item label="DDrawable"           since="0.7.0" last="0.7.0" note="-")
  $(prot_item label="DLogger"             since="0.5.0" last="0.5.0" note="-")
  $(prot_item label="DParsable"           since="0.1.0" last="0.1.0" note="-")
  $(prot_item label="DQueuable"           since="0.4.0" last="0.4.0" note="-")
  $(prot_item label="DRandomable"         since="0.2.0" last="0.2.0" note="-")
  $(prot_item label="DScreenHandler"      since="0.7.0" last="0.7.0" note="-")
  $(prot_item label="DSimpleArithmetic"   since="0.6.0" last="0.6.0" note="-")
  $(prot_item label="DSizeable"           since="0.1.0" last="0.1.0" note="-")
  $(prot_item label="DSocketAddressable"  since="0.3.0" last="0.3.0" note="-")
  $(prot_item label="DStackable"          since="0.4.0" last="0.4.0" note="-")
  $(prot_item label="DTextScannable"      since="0.4.0" last="0.4.0" note="-")
  $(prot_item label="DTextFilterable"     since="0.3.0" last="0.3.0" note="-")
  $(prot_item label="DTextReadable"       since="0.1.0" last="0.1.0" note="-")
  $(prot_item label="DTextWritable"       since="0.1.0" last="0.1.0" note="-")
  $(prot_item label="DTextable"           since="0.1.0" last="0.1.0" note="-")
  $(prot_item label="DXMLHandler"         since="0.4.0" last="0.4.0" note="-")
  </table>
  <br>
  </dhpCode>
</dhpClass>



<dhpPage class="roadmap" output="roadmap.html">

<dhpClass name="roadmap" extends="ofc" title="Roadmap">
  <dhpCode name="contents" action="replace">
  <h2>0.8.0: $(date format="%B %Y" value="20061115")</h2>
  <p>For delivery eight the classes DGraphScreen and DFtpClient are
  planned. Also example programs will be published on the site.<br>
  Status: under way</p>
  <h2>0.7.0: $(date format="%B %Y" value="20060115")</h2>
  <p>Seventh delivery of the OFC library. Planned and implemented were the 
  following classes: DTextScreen, DDoubleArray and DBigDouble.<br>
  Status: done</p>
  <h2>0.6.0: $(date format="%B %Y" value="20050615")</h2>
  <p>Sixth delivery of the OFC library. Planned were the following classes: DTextWindow,
  DGraphWindow, DBZipFile and DBigInt. The last two classes were implemented.
  The first two are (again) moved to the next release.<br>
  Status: done</p>
  <h2>0.5.0: $(date format="%B %Y" value="20050115")</h2>
  <p>Fifth delivery of the OFC library. This delivery will extend the five 
  clusters with new classes. Planned were the following classes: DDateTime,
  DTextScreen and DEvent. Only DDateTime was implemented. DTextScreen is
  moved to the next release. Implementation of DEvent is uncertain.<br>
  Status: done</p>
  <h2>0.4.0: $(date format="%B %Y" value="20041115")</h2>
  <p>Fourth delivery of the OFC library. This delivery will extend the five 
  clusters with new classes. Planned are the following classes: DColor,
  DCircle, DXML and DHTTPClient.<br>
  Status: done</p>
  <h2>0.3.0: $(date format="%B %Y" value="20040622")</h2>
  <p>Third delivery of the OFC library. It will contain the clusters DataTypes, 
  Collections, Network, C-library wrappers and compound classes. This delivery 
  will focus on the network cluster.<br>
  Status: done</p>
  <h2>0.2.0: $(date format="%B %Y" value="20040115")</h2>
  <p>Second delivery of the OFC library. It will contain the clusters DataTypes, 
  Collections, C-library wrappers and compound classes. The focus for this
  one will be on Collections and c-library wrappers. Again the network 
  cluster will not be part of this delivery.<br>
  Status: done</p>
  <h2>0.1.0: $(date format="%B %Y" value="20031015")</h2>
  <p>First delivery of the OFC library. It will contain the clusters DataTypes, 
  Collections, C-library wrappers and compound classes. The focus of this 
  delivery will be on DataTypes and Collections. The network cluster will
  not be part of this delivery.<br>
  Status: done</p>
  </dhpCode>
</dhpClass>






<dhpPage class="faq" output="faq.html">

<dhpClass name="faq" extends="ofc" title="Frequently Asked Questions" output="faq.html">
  <dhpCode name="contents" action="replace">
 <h2>Platforms and compilers</h2>
  <h3>For what platforms is OFC targetted?</h3>
  <p>At the moment only the platforms Linux, FreeBSD and WIN32 are targetted.</p>
  <h3>With which compilers is OFC tested?</h3>
  <p>There are not a lot of objective-c compilers around. OFC is tested on the 
  Linux and FreeBSD platform with the gcc compiler with objective-c support. On
  the WIN32 platform MingW32 is used. OFC is not tested with CYGWIN.</p>
 <h2>Class structure</h2>
  <h3>Does OFC use a base object</h3>
  <p>Yes, OFC uses the standard class Object as base object. OFC doesn't introduce
  an extra base class.</p>
 <h2>Memory management</h2>
  <h3>Does OFC use reference counting?</h3>
  <p>No, OFC does not use reference counting. It introduces extra overhead and it will
  not always work correctly.</p>
  <h3>Can I use a garbage collector with OFC?</h3>
  <p>Well I didn't try it, but I can't see a reason why it shouldn't work.</p>
  <h3>How does the collections handle objects?</h3>
  <p>Collections store pointers to objects. They will not make copies before they store
  the objects. It is the decision of the programmer to make the collection the owner of 
  the object or some other object. To support the programmer there are two 'free' methods
  in the collections:
  <ul>
   <li><tt>shallowFree</tt><br>this method will only free the collection, not the 
       objects stored in the collection.
   <li><tt>free</tt><br>this method will both free the collection and the objects 
       stored in the collection.
  </ul></p>
  <h3>How do the DAvlTree and DHashTable store keys?</h3>
  <p>DAvlTree and DHashTable copy the key before storing, to prevent that
  the key is changed outside the scope of the tree c.q. hashtable. As a result the key is 
  always freed when the tree c.q. hashtable element is freed. </p>
  <h3>How do I copy objects?</h3>
  <p>The standard class Object implements four methods for coping objects:
  <ul>
    <li><tt>shallowCopy</tt><br>
    Default this method makes a binary copy of the original object. This is okee
    for objects that only use basic data types (like int, long and so on) as 
    members, but not for objects that have private objects and dynamic variables
    as members. In that case the <tt>shallowCopy</tt> method should be overridden 
    to make copies of these dynamic variables.<br>
    If an object stores external objects, as do collections, this method will not 
    copy the stored external objects, but keeps the reference to the object.<br>
    If an object is a copy made by <tt>shallowCopy</tt> method and there is a 
    <tt>shallowFree</tt> method, than the object must be freed by the 
    <tt>shallowFree</tt> method.<br>
    Keep in mind that the self pointer in this method is the pointer to the original
    object. The copy is created by calling <tt>[super shallowCopy]</tt>.
    <li><tt>copy</tt><br>
    This method calls first the <tt>shallowCopy</tt> method and than the 
    <tt>deepen</tt> method. The <tt>shallowCopy</tt> will copy the object,
    but will keep the references to external stored objects. The <tt>deepen</tt> 
    method will also copy the external stored objects. As a result the whole 
    object is copied, ala a deep copy.<br>
    If an object copy is made by the <tt>copy</tt> or <tt>deepCopy</t> method and 
    there is a <tt>shallowFree</tt> method, the resulting object must be freed 
    by the <tt>free</tt> method.
    <li><tt>deepCopy</tt><br>
    This method is identical to the <tt>copy</tt> method: it does a deep copy 
    of the object by calling <tt>shallowCopy</tt> and <tt>deepen</tt>.
    <li><tt>deepen</tt><br>
    This method 'deepens' an already copied object. It calls the <tt>copy</tt> 
    method of all externally stored objects. As a result this method is normally only 
    implemented by collection classes.<br>
    Keep in mind that the self pointer in this method, points to the copied object.
  </ul>
  Not all classes in the OFC library implements the <tt>shallowCopy</tt> method.
  If an object cannot be copied, a warning will be issued.<br>
  In the versions prior 0.7.1 the use of <tt>shallowCopy</tt> results in an 
  object that shares private objects and dynamic variables with the original 
  object. As a result freeing the original or the copied object could result 
  in a seg-fault. In version 0.7.1 this is fixed.
  </p>
 <h2>Wrapper classes</h2>
  <h3>Why is the wrapper class sometimes not named the same as the (external) library?</h3>
   <p>The name of the class is independant of the name of the external
   library to make it possible to change the external library. For every
   library it is possible that the development is discontinued or that there
   will be a beter alternative one day. By using a more general name for the
   wrapper class, there is a good chance that the underlying library can be
   changed, without consequences for the interface of the wrapper class.</p>
  <h3>Is it possible to check if a wrapper class is present?</h3>
   <p>Classes that depend on other (external) libraries, will set a define to
   indicate that the class is present in the OFC library. For example the class
   DRegEx defines HAVE_DREGEX if the class is present.</p>
 <h2>Error handling</h2>
  <h3>What type of errors are identified by OFC?</h3>
    <p>There are three types of errors identified by OFC:
    <ol>
     <li>Runtime errors related to Objective-C<br>
     Examples: Method not implemented by a class, Out of memory.
     <li>Programmer's errors<br>
     Examples: Index out of range, invalid value for a method parameter.
     <li>Environment errors<br>
     Examples: File not found, connection unexpectedly closed.
   </ol></p>
  <h3>How does OFC handle runtime errors?</h3>
  <p>OFC does not handle runtime errors. It is up to the programmer to set an error handler
  (using <tt>objc_error_handler</tt>) and handle the errors.</p>
  <h3>How does OFC handle programmer's errors?</h3>
  <p>OFC uses the concept of <cite>Garbage in, defined value out</cite>. So for example if the programmer 
  uses an index that is out of range for an object, a warning is given and a valid (but possible incorrect)
  value is returned. There are a few exceptions: test methods will return the
  correctness of the parameter and will not give a warning, some parameters can not be checked 
  (for example an invalid pointer) and only parameters of OFC methods will be checked.</p>
  <h3>How does OFC handle environment errors?</h3>
  <p>Methods in OFC handle environment errors by returning a boolean that indicates success (or failure) or
  returning an error code. The error code is comparable to the standard errno.
  Some classes also implement test methods and methods to get more information about the error.
  <h3>Does OFC use exceptions?</h3>
  <p>In the current version OFC does not use exceptions.</p>
  </dhpCode>
</dhpClass>



<dhpPage class="download" output="download.html">

<dhpClass name="download" extends="ofc" title="Download">
  <dhpMacro name="down_item" time="def" version="def" source="def">
  <tr class="downitemtxt">
    <td class="downitemtxt">$(date format="%b %d, %Y" value="$(time)")</td>
    <td class="downitemtxt">$(version)</td>
    <td><a class="downitemtxt"href="download/$(source)">$(source)</a></td>
  </tr>
  </dhpMacro>
      
  <dhpCode name="contents" action="replace">
  <p>In the table there is an overview of the downloadable packages. The latest
  version is at the top. At the moment there are only source archives. The
  package contains the source, a test program, the html documentation, quick
  reference cards in tex and the configure scripts to build the library on 
  Linux and WIN32. You will need the gcc compiler with objective-c support. 
  On WIN32 the package is tested with MingW32.</p>
  <table class="downbox" border="0" align="center" cellspacing="0" cellpadding="5">
  <tr><th class="downheadtxt" colspan="3">Versions</th></tr>
  <tr>
    <th class="downsubtxt">Date</th>
    <th class="downsubtxt">Version</th>
    <th class="downsubtxt">Source</th>
  </tr>

  $(down_item time="20060625" version="0.7.1" source="ofc-0.7.1.tar.gz")
  $(down_item time="20060114" version="0.7.0" source="ofc-0.7.0.tar.gz")
  $(down_item time="20050620" version="0.6.0" source="ofc-0.6.0.tar.gz")
  <!---$ (down_item time="20050213" version="0.5.0" source="ofc-0.5.0.tar.gz")-->
  <!---$ (down_item time="20041117" version="0.4.0" source="ofc-0.4.0.tar.gz")-->
  <!---$ (down_item time="20040622" version="0.3.0" source="ofc-0.3.0.tar.gz")-->
  <!---$ (down_item time="20040215" version="0.2.1" source="ofc-0.2.1.tar.gz")-->
  <!---$ (down_item time="20031015" version="0.1.0" source="ofc-0.1.0.tar.gz")-->
  </table>
  <br>
  </dhpCode>
</dhpClass>

<dhpPage class="changelog" output="changelog.html">
  
<dhpClass name="changelog" extends="ofc" title="ChangeLog">
  <dhpCode name="contents" action="replace" pack="no">
    <pre>
<dhpInclude input="../ChangeLog">
    </pre>
  </dhpCode>
</dhpClass>
